/**
 * API调用错误处理工具
 */

import { ElMessage } from 'element-plus';

/**
 * 通用API调用错误处理包装器
 * @param {Function} apiCall - API调用函数
 * @param {string} successMessage - 成功提示信息
 * @param {string} errorMessage - 错误提示信息
 * @returns {Promise} 返回API调用的结果
 */
export const safeApiCall = async (apiCall, successMessage = null, errorMessage = '操作失败，请稍后重试') => {
    try {
        const result = await apiCall();
        if (result && result.code === 0 && successMessage) {
            ElMessage.success(successMessage);
        }
        return result;
    } catch (error) {
        // 网络错误等异常情况已经在axios拦截器中处理
        console.error('API调用异常:', error);
        return null;
    }
};

/**
 * 带业务逻辑的API调用错误处理包装器
 * @param {Function} apiCall - API调用函数
 * @param {Function} successCallback - 成功回调函数
 * @param {Function} errorCallback - 错误回调函数
 * @param {string} successMessage - 成功提示信息
 * @param {string} errorMessage - 错误提示信息
 */
export const safeApiCallWithCallback = async (apiCall, successCallback, errorCallback = null, successMessage = null, errorMessage = '操作失败，请稍后重试') => {
    try {
        const result = await apiCall();
        if (result && result.code === 0) {
            if (successCallback) {
                successCallback(result);
            }
            if (successMessage) {
                ElMessage.success(successMessage);
            }
        } else {
            // 业务错误已在axios拦截器中处理
            console.warn('API业务错误:', result?.message);
            if (errorCallback) {
                errorCallback(result);
            }
        }
    } catch (error) {
        // 网络错误等异常情况已经在axios拦截器中处理
        console.error('API调用异常:', error);
        if (errorCallback) {
            errorCallback(error);
        }
    }
};

/**
 * 列表数据获取的通用错误处理
 * @param {Function} apiCall - API调用函数
 * @param {Function} dataCallback - 数据处理回调函数
 * @param {string} errorMessage - 错误提示信息
 */
export const safeGetListData = async (apiCall, dataCallback, errorMessage = '获取数据失败，请稍后重试') => {
    try {
        const result = await apiCall();
        if (result && result.code === 0) {
            if (dataCallback) {
                dataCallback(result);
            }
        } else {
            // 业务错误已在axios拦截器中处理
            console.warn('获取列表数据失败:', result?.message);
        }
    } catch (error) {
        // 网络错误等异常情况已经在axios拦截器中处理
        console.error('获取列表数据异常:', error);
    }
};

/**
 * 删除操作的通用错误处理
 * @param {Function} apiCall - API调用函数
 * @param {Function} successCallback - 成功回调函数
 * @param {string} successMessage - 成功提示信息
 */
export const safeDeleteOperation = async (apiCall, successCallback, successMessage = '删除成功') => {
    try {
        const result = await apiCall();
        if (result && result.code === 0) {
            if (successCallback) {
                successCallback(result);
            }
            ElMessage.success(successMessage);
        } else {
            // 业务错误已在axios拦截器中处理
            console.warn('删除操作失败:', result?.message);
        }
    } catch (error) {
        // 网络错误等异常情况已经在axios拦截器中处理
        console.error('删除操作异常:', error);
    }
};

/**
 * 表单提交的通用错误处理
 * @param {Function} apiCall - API调用函数
 * @param {Function} successCallback - 成功回调函数
 * @param {string} successMessage - 成功提示信息
 * @param {string} errorMessage - 错误提示信息
 */
export const safeFormSubmit = async (apiCall, successCallback, successMessage = '操作成功', errorMessage = '操作失败，请稍后重试') => {
    try {
        const result = await apiCall();
        if (result && result.code === 0) {
            if (successCallback) {
                successCallback(result);
            }
            ElMessage.success(successMessage);
        } else {
            // 业务错误已在axios拦截器中处理
            console.warn('表单提交失败:', result?.message);
        }
    } catch (error) {
        // 网络错误等异常情况已经在axios拦截器中处理
        console.error('表单提交异常:', error);
    }
};